package com.carsa.blackberry.util.persistence;

/**
 * @author Nahuel Barrios.
 * @since 23/07/2010.
 * @version 1.0
 */
public interface FileHandler {

    public static final String URL_PREFFIX = "file://";

    /**
     * Establece una conexion con el archivo correspondiente al filePath. Si el archivo no existe, entonces lo crea.
     * 
     * @param filePath
     *            la URL absoluta del archivo, es decir: "/SDCard/archivo.txt"
     * @param registryLenght
     *            la longitud de los registros. Por lo tanto, el archivo debe ser de longitud fija.
     * @return true si se pudo establecer la conexion, sino false.
     */
    public boolean entablishConnection(String filePath, int registryLenght);

    /**
     * Establece una conexion con el archivo correspondiente al filePath. Si el archivo no existe, entonces lo crea.
     * 
     * @param filePath
     *            la URL absoluta del archivo, es decir: "/SDCard/archivo.txt"
     * @return true si se pudo establecer la conexion, sino false.
     */
    public boolean entablishConnection(String filePath);

    /**
     * Escribe la informacion de data en el archivo con el que ya se tiene establecida una conexion.
     * 
     * @param data
     *            La informacion a persistir.
     * @return <code>true</code> cuando se pudo grabar la informacion correctamente, sino <code>false</code>.
     */
    public boolean writeFile(String data);

    /**
     * @return Un {@link String} conteniendo toda la informacion del archivo con el que ya se tiene una conexion
     *         establecida.
     * @throws java.io.IOException
     */
    public String getFileData() throws java.io.IOException;

    /**
     * @param idx
     * @return El registro numero idx (contando a partir de 1) del archivo de longitud fija con el que ya tenemos una
     *         conexion establecida. O null si no se puede obtener tal informacion
     */
    public String getFileLine(int idx);

    /**
     * Sobreescribe toda la informacion del archivo con el cual se tiene una conexion con la informacion de fileData.
     * 
     * @param fileData
     *            La informacion con la que se llenara el archivo.
     * @return <code>true</code> cuando se pudo grabar la informacion correctamente, sino <code>false</code>.
     */
    public boolean overwriteWith(String fileData);

}